Notes
Outline
Object-Oriented and
Classical Software Engineering
 
Fifth Edition, WCB/McGraw-Hill, 2002

Stephen R. Schach
srs@vuse.vanderbilt.edu
CHAPTER 13
Overview
Design and abstraction
Action-oriented design
Data flow analysis
Transaction analysis
Data-oriented design
Object-oriented design
Elevator problem: object-oriented design
Overview (contd)
Formal techniques for detailed design
Real-time design techniques
Testing during the design phase
CASE tools for the design phase
Metrics for the design phase
Air Gourmet Case Study: object-oriented design
Challenges of the design phase
Data and Actions
Two aspects of a product
Actions which operate on data
Data on which actions operate
The two basic ways of designing a product
Action-oriented design
Data-oriented design
Third way
Hybrid methods
For example, object-oriented design
Design Activities
Architectural design
Detailed design
Design testing
Architectural Design
Input: Specifications
Output: Modular decomposition
Abstraction
Detailed Design
Each module is designed
Specific algorithms
Data structures
Action-Oriented Design Methods
Data flow analysis
When to use it
With most specification methods (Structured Systems Analysis here)
Key point: Have detailed action information from DFD
Data Flow Analysis
Product transforms input into output
Determine
“Point of highest abstraction of input”
“Point of highest abstract of output”
Data Flow Analysis (contd)
Decompose into three modules
Repeat stepwise until each module has high cohesion
Minor modifications may be needed to lower coupling
Data Flow Analysis (contd)
Example
Design a product which takes as input a file name, and returns the number of words in that file (like UNIX wc )
Data Flow Analysis Example(contd)
First refinement
Refine modules of communicational cohesion
Data Flow Analysis Example(contd)
Second refinement
All eight modules have functional cohesion
Multiple Input and Output Streams
Point of highest abstraction for each stream
Continue until each module has high cohesion
Adjust coupling if needed
Transaction Analysis
DFA poor for transaction processing products
Example: ATM (Automatic Teller Machine)
Poor design
Logical cohesion, control coupling
Corrected Design Using Transaction Analysis
Software reuse
Data-Oriented Design
Basic principle
The structure of a product must conform to the structure of its data
Three very similar methods
Warnier
Orr
Jackson
Data-oriented design
Has never been as popular as action-oriented design
With the rise of OOD, data-oriented design has largely fallen out of fashion
Object-Oriented Design (OOD)
Aim
Design product in terms of objects extracted during OOA
If we are using a language without inheritance (C, Ada 83)
Use abstract data type design
If we are using a language without a type statement (FORTRAN, COBOL)
Use data encapsulation
Object-Oriented Design Steps
OOD consists of four steps:
1. Construct interaction diagrams for each scenario
2. Construct the detailed class diagram
3. Design the product in terms of clients of objects
4. Proceed to the detailed design
Elevator Problem: OOD
Step 1.  Construct interaction diagrams for each scenario
Sequence diagrams
Collaboration diagrams
Both show the same thing
Objects and messages passed between them
But in a different way
Elevator Problem: OOD (contd)
Normal scenario
Elevator Problem: OOD (contd)
Sequence diagram
"Collaboration diagram"
Collaboration diagram
Elevator Problem: OOD (contd)
Step 2.  Construct Detailed Class Diagram
Do we assign an action to a class or to a client of that class?
Criteria
Information hiding
Reducing number of copies of action
Responsibility-driven design
Examples
close doors is assigned to Elevator Doors
move one floor down is assigned to Elevator
 Elevator Problem: OOD (contd)
Detailed class diagram
Elevator Problem: OOD (contd)
Step 3.  Design product in terms of clients of objects
Draw an arrow from an object to a client of that object
Objects that are not clients of any object have to be initiated, probably by the main method
Additional methods may be needed
Elevator Problem: OOD (contd)
C++ Client-object relations
Elevator Problem: OOD (contd)
Java Client-object relations
Elevator Problem: OOD (contd)
elevator controller needs method elevator control loop so that main (or elevator application) can call it
Elevator Problem: OOD (contd)
Step 4.  Perform detailed design
Detailed design of method elevator controller loop
Formal Techniques for Detailed Design
Implementing a complete product and then proving it correct is hard
However, use of formal techniques during detailed design can help
Correctness proving can be applied to module-sized pieces
The design should have fewer faults if it is developed in parallel with a correctness proof
If the same programmer does the detailed design and implementation
The programmer will have a positive attitude to the detailed design
Should lead to fewer faults
Design of Real-Time Systems
Difficulties associated with real-time systems
Inputs come from real world
Software has no control over timing of inputs
Frequently implemented on distributed software
Communications implications
Timing issues
Problems of synchronization
Race conditions
Deadlock (deadly embrace)
Major difficulty in design of real-time systems
Determining whether the timing constraints are met by the design
Real-Time Design Methods
Usually, extensions of nonreal-time methods to real-time
We have limited experience in use of any real-time methods
The state-of-the-art is not where we would like it to be
Testing during the Design Phase
Design reviews
Design must correctly reflect specifications
Design itself must be correct
Transaction-driven inspections
CASE Tools for the Design Phase
UpperCASE tools
Built around data dictionary
Consistency checker
Screen, report generators
Modern tools represent OOD using UML
Examples: Software through Pictures, Rose
Metrics for the Design Phase
The five basic metrics
Cyclomatic complexity is problematic
Data complexity is ignored
Little use with object-oriented paradigm
Air Gourmet Case Study: Object-Oriented Design
OOD consists of four steps:
1.  Construct interaction diagrams for each scenario
2.  Construct the detailed class diagram
3.  Design the product in terms of clients of objects
4.  Proceed to the detailed design
Step 1.  Interaction Diagrams
Extended scenario for making a reservation
Step 1.  Interaction Diagrams (contd)
Sequence diagram for making a reservation
Step 1.  Interaction Diagrams (contd)
Collaboration diagram for sending and returning a postcard
Step 2.  Detailed Class Diagram
        C++ version      Java version
Step 3.  Client–Object Relations
       C++ version            Java version
Step 4. Detailed Design
The detailed design can be found in
Appendix H (for implementation in C++)
Appendix I (for implementation in Java)
Challenges of the Design Phase
Design team should not do too much
Detailed design should not become code
Design team should not do too little
It is essential for the design team to produce a complete detailed design
We need to grow great designers